home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / rwsem-spinlock.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  66 lines

  1. /* rwsem-spinlock.h: fallback C implementation
  2.  *
  3.  * Copyright (c) 2001   David Howells (dhowells@redhat.com).
  4.  * - Derived partially from ideas by Andrea Arcangeli <andrea@suse.de>
  5.  * - Derived also from comments by Linus
  6.  */
  7.  
  8. #ifndef _LINUX_RWSEM_SPINLOCK_H
  9. #define _LINUX_RWSEM_SPINLOCK_H
  10.  
  11. #ifndef _LINUX_RWSEM_H
  12. #error "please don't include linux/rwsem-spinlock.h directly, use linux/rwsem.h instead"
  13. #endif
  14.  
  15. #include <linux/spinlock.h>
  16. #include <linux/list.h>
  17.  
  18. #ifdef __KERNEL__
  19.  
  20. #include <linux/types.h>
  21.  
  22. struct rwsem_waiter;
  23.  
  24. /*
  25.  * the rw-semaphore definition
  26.  * - if activity is 0 then there are no active readers or writers
  27.  * - if activity is +ve then that is the number of active readers
  28.  * - if activity is -1 then there is one active writer
  29.  * - if wait_list is not empty, then there are processes waiting for the semaphore
  30.  */
  31. struct rw_semaphore {
  32.     __s32            activity;
  33.     spinlock_t        wait_lock;
  34.     struct list_head    wait_list;
  35. #if RWSEM_DEBUG
  36.     int            debug;
  37. #endif
  38. };
  39.  
  40. /*
  41.  * initialisation
  42.  */
  43. #if RWSEM_DEBUG
  44. #define __RWSEM_DEBUG_INIT      , 0
  45. #else
  46. #define __RWSEM_DEBUG_INIT    /* */
  47. #endif
  48.  
  49. #define __RWSEM_INITIALIZER(name) \
  50. { 0, SPIN_LOCK_UNLOCKED, LIST_HEAD_INIT((name).wait_list) __RWSEM_DEBUG_INIT }
  51.  
  52. #define DECLARE_RWSEM(name) \
  53.     struct rw_semaphore name = __RWSEM_INITIALIZER(name)
  54.  
  55. extern void FASTCALL(init_rwsem(struct rw_semaphore *sem));
  56. extern void FASTCALL(__down_read(struct rw_semaphore *sem));
  57. extern int FASTCALL(__down_read_trylock(struct rw_semaphore *sem));
  58. extern void FASTCALL(__down_write(struct rw_semaphore *sem));
  59. extern int FASTCALL(__down_write_trylock(struct rw_semaphore *sem));
  60. extern void FASTCALL(__up_read(struct rw_semaphore *sem));
  61. extern void FASTCALL(__up_write(struct rw_semaphore *sem));
  62. extern void FASTCALL(__downgrade_write(struct rw_semaphore *sem));
  63.  
  64. #endif /* __KERNEL__ */
  65. #endif /* _LINUX_RWSEM_SPINLOCK_H */
  66.